home *** CD-ROM | disk | FTP | other *** search
- //-----------------------------------------------------------------------------
- // Torque Game Engine
- // Copyright (C) GarageGames.com, Inc.
- //-----------------------------------------------------------------------------
-
-
- //-----------------------------------------------------------------------------
- // This script function is called before a client connection
- // is accepted. Returning "" will accept the connection,
- // anything else will be sent back as an error to the client.
- // All the connect args are passed also to onConnectRequest
- //
- function GameConnection::onConnectRequest( %client, %netAddress, %name )
- {
- echo("Connect request from: " @ %netAddress);
- if($Server::PlayerCount >= $pref::Server::MaxPlayers)
- return "CR_SERVERFULL";
- return "";
- }
-
- //-----------------------------------------------------------------------------
- // This script function is the first called on a client accept
- //
- function GameConnection::onConnect( %client, %name )
- {
- // Send down the connection error info, the client is
- // responsible for displaying this message if a connection
- // error occures.
- messageClient(%client,'MsgConnectionError',"",$Pref::Server::ConnectionError);
-
- // Send mission information to the client
- sendLoadInfoToClient( %client );
-
- // Simulated client lag for testing...
- // %client.setSimulatedNetParams(0.1, 30);
-
- // Get the client's unique id:
- // %authInfo = %client.getAuthInfo();
- // %client.guid = getField( %authInfo, 3 );
- %client.guid = 0;
- addToServerGuidList( %client.guid );
-
- // Set admin status
- if (%client.getAddress() $= "local") {
- %client.isAdmin = true;
- %client.isSuperAdmin = true;
- }
- else {
- %client.isAdmin = false;
- %client.isSuperAdmin = false;
- }
-
- // Save client preferences on the connection object for later use.
- %client.gender = "Male";
- %client.armor = "Light";
- %client.race = "Human";
- %client.skin = addTaggedString( "base" );
- %client.setPlayerName(%name);
- %client.score = 0;
-
- //
- $instantGroup = ServerGroup;
- $instantGroup = MissionCleanup;
- echo("CADD: " @ %client @ " " @ %client.getAddress());
-
- // Inform the client of all the other clients
- %count = ClientGroup.getCount();
- for (%cl = 0; %cl < %count; %cl++) {
- %other = ClientGroup.getObject(%cl);
- if ((%other != %client)) {
- // These should be "silent" versions of these messages...
- messageClient(%client, 'MsgClientJoin', "",
- %other.name,
- %other,
- %other.sendGuid,
- %other.score,
- %other.isAIControlled(),
- %other.isAdmin,
- %other.isSuperAdmin);
- }
- }
-
- // Inform the client we've joined up
- messageClient(%client,
- 'MsgClientJoin', '\c2Welcome to the Torque demo app %1.',
- %client.name,
- %client,
- %client.sendGuid,
- %client.score,
- %client.isAiControlled(),
- %client.isAdmin,
- %client.isSuperAdmin);
-
- // Inform all the other clients of the new guy
- messageAllExcept(%client, -1, 'MsgClientJoin', '\c1%1 joined the game.',
- %client.name,
- %client,
- %client.sendGuid,
- %client.score,
- %client.isAiControlled(),
- %client.isAdmin,
- %client.isSuperAdmin);
-
- // If the mission is running, go ahead download it to the client
- if ($missionRunning)
- %client.loadMission();
- $Server::PlayerCount++;
- }
-
- //-----------------------------------------------------------------------------
- // A player's name could be obtained from the auth server, but for
- // now we use the one passed from the client.
- // %realName = getField( %authInfo, 0 );
- //
- function GameConnection::setPlayerName(%client,%name)
- {
- %client.sendGuid = 0;
-
- // Minimum length requirements
- %name = stripTrailingSpaces( strToPlayerName( %name ) );
- if ( strlen( %name ) < 3 )
- %name = "Poser";
-
- // Make sure the alias is unique, we'll hit something eventually
- if (!isNameUnique(%name))
- {
- %isUnique = false;
- for (%suffix = 1; !%isUnique; %suffix++) {
- %nameTry = %name @ "." @ %suffix;
- %isUnique = isNameUnique(%nameTry);
- }
- %name = %nameTry;
- }
-
- // Tag the name with the "smurf" color:
- %client.nameBase = %name;
- %client.name = addTaggedString("\cp\c8" @ %name @ "\co");
- }
-
- function isNameUnique(%name)
- {
- %count = ClientGroup.getCount();
- for ( %i = 0; %i < %count; %i++ )
- {
- %test = ClientGroup.getObject( %i );
- %rawName = stripChars( detag( getTaggedString( %test.name ) ), "\cp\co\c6\c7\c8\c9" );
- if ( strcmp( %name, %rawName ) == 0 )
- return false;
- }
- return true;
- }
-
- //-----------------------------------------------------------------------------
- // This function is called when a client drops for any reason
- //
- function GameConnection::onDrop(%client, %reason)
- {
- %client.onClientLeaveGame();
-
- removeFromServerGuidList( %client.guid );
- messageAllExcept(%client, -1, 'MsgClientDrop', '\c1%1 has left the game.', %client.name, %client);
-
- removeTaggedString(%client.name);
- echo("CDROP: " @ %client @ " " @ %client.getAddress());
- $Server::PlayerCount--;
-
- // Reset the server if everyone has left the game
- if( $Server::PlayerCount == 0 && $Server::Dedicated)
- schedule(0, 0, "resetServerDefaults");
- }
-
-
- //-----------------------------------------------------------------------------
-
- function GameConnection::startMission(%this)
- {
- // Inform the client the mission starting
- commandToClient(%this, 'MissionStart', $missionSequence);
- }
-
-
- function GameConnection::endMission(%this)
- {
- // Inform the client the mission is done
- commandToClient(%this, 'MissionEnd', $missionSequence);
- }
-
-
- //--------------------------------------------------------------------------
- // Sync the clock on the client.
-
- function GameConnection::syncClock(%client, %time)
- {
- commandToClient(%client, 'syncClock', %time);
- }
-
-
- //--------------------------------------------------------------------------
- // Update all the clients with the new score
-
- function GameConnection::incScore(%this,%delta)
- {
- %this.score += %delta;
- messageAll('MsgClientScoreChanged', "", %this.score, %this);
- }
-